The present invention, in some embodiments thereof, relates to refactoring a target code to optimize the execution performance, and, more specifically, but not exclusively, to refactoring the target code to optimize the execution performance by consolidating shared resources accesses.
As technology advances and software intensive application become more abundant, software development is being done by a rapidly growing number of programmers who may have limited experience and may not be fully familiar with proper software development practices. Moreover, software development may involve multiple programmers each contributing to the joined software product and may be unaware of implementations and/or actions and more specifically of resource usage made by software developed by the other programmers.
Furthermore, software development may employ modern agile development practices such as, for example, adaptive software development (ASD), extreme programming (XP), scrum and/or scrumban software development methodologies using various tools such as, Rally, VersionOne, Jira, and/or Mingle and the likes. Such agile development practices may dictate evolution of the software product through incremental software development in which new software features, elements and/or entities are added over time. Moreover the agile development practices may encourage distributed software development of a software product in which multiple development teams contribute to a software base of the software product.
Additional software features, elements and/or entities from different teams and or over time may utilize shared resources, for example, network access, communication interfaces access, memory access, storage access and/or processing nodes used by the existing software features, elements and/or entities, however the newly added software may be unaware of this resources usage. This may result in poor resource utilization, especially when accessing the shared resources presents a performance penalty, for example, high access time, long communication session and/or computation load.